abstract class Shape {
    // getArea 方法只有声明没有实现体
    // 实现让子类自己完成 需要定义成抽象方法，否则会报错
    // 抽象方法只能在抽象类中定义  子类必须实现抽象类的方法
    abstract getArea(): number
}

class Rectangle extends Shape {
    constructor(public width: number, public height: number) {
        super()
    }

    getArea() {
        return this.width * this.height
    }
}

class Circle extends Shape {
    constructor(public radius: number) {
        super()
    }
    getArea() {
        return this.radius ** 2 * Math.PI
    }
}




// 通用的函数
function calcArea(shape: Shape) {
    return shape.getArea()
}




console.log(calcArea(new Rectangle(10, 10)))
console.log(calcArea(new Circle(2)))

export { }